// 来自noipnoi非常好的思路
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5; // 最大可能的蛇数量

// 前缀和数组，s[i]表示前i条蛇的长度总和
int s[N];

// 队列的头指针和尾指针
// head表示当前队列的第一个元素位置
// tail表示当前队列的最后一个元素位置
int head = 1, tail = 0;

int main() {
  int type, x, q;
  cin >> q; // 读取操作次数

  while (q--) {  // 处理每次操作
    cin >> type; // 读取操作类型

    if (type == 1) {
      // type1操作：向队列尾端插入一条长度为x的蛇
      scanf("%d", &x);
      ++tail; // 尾指针后移
      // 更新前缀和数组：当前蛇的总长度 = 上一条蛇的总长度 + 当前蛇的长度
      s[tail] = s[tail - 1] + x;
    } else if (type == 2) {
      // type2操作：将队首的蛇弹出队列
      // 实际上只是移动头指针，不真正删除数据
      head++;
    } else if (type == 3) {
      // type3操作：查询队列中第k条蛇的头部位置
      scanf("%d", &x);
    }

    // 输出队列中第x条蛇的头部位置：队列中第 x 条蛇的头部位置 = 前 x-1
    // 条蛇的长度总和 计算方法：前(head+x-2)条蛇的长度总和 -
    // 前(head-1)条蛇的长度总和 即第head到第(head+x-2)条蛇的长度总和
    printf("%lld\n", 1ll * s[head + x - 2] - s[head - 1]);
  }

  return 0;
}